/*
 * @(#)XfspActionListener.java        2004/08/01
 *
 * This file is part of Xfuzzy 3.1, a design environment for fuzzy logic
 * based systems.
 *
 * (c) 2000 IMSE-CNM. The authors may be contacted by the email address:
 *                    xfuzzy-team@imse.cnm.es
 *
 * Xfuzzy is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by
 * the Free Software Foundation.
 *
 * Xfuzzy is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * for more details.
 */

package xfuzzy.xfsp.view.listener;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import xfuzzy.xfsp.view.IXfspView;

/**
 * <p> <b>Description:</b> Clase principal de objetos que atienden eventos de
 * ventana de la que heredar�n todas las dem�s.
 * <p> <b>E-mail</b>: <ADDRESS>joragupra@us.es</ADDRRESS>
 * @author Jorge Agudo Praena
 * @version 1.2
 * @see ActionListener
 *
 */
public abstract class XfspActionListener
    implements ActionListener {

  //ventana cuyos eventos se escucha
  private IXfspView frame;

  /**
   * <p> <b>Descripci�n:</b> crea un objeto que escucha eventos de ventana.
   * @param frame Vetana cuyos eventos ser�n escuchados por el objeto actual.
   *
   */
  public XfspActionListener(IXfspView frame) {
    this.frame = frame;
  }

  /**
   * <p> <b>Descripci�n:</b> acci�n realizada por la ventana cuando se produce
   * un evento.
   * @param e Evento producido por la ventana escuchada.
   *
   */
  public void actionPerformed(ActionEvent e) {
    //obtiene el comando del evento recibido
    String command = e.getActionCommand();
    //si el comando era de cancelaci�n...
    if (command.equals("Cancel")) {
      //...cierra la ventana escuchada
      close();
    }
    //si el comando era de aceptaci�n...
    else if (command.equals("Ok")) {
      //...env�a los par�metros introducidos en la ventana
      sendParameters();
    }
    //en otro caso...
    else {
      //...se realizan acciones espec�ficas seg�n la ventana escuchada
      specificActions(e);
    }
  }

  /**
   * <p> <b>Descripci�n:</b> env�a los par�metros introducidos en la ventana
   * escuchada.
   *
   */
  protected abstract void sendParameters();

  /**
   * <p> <b>Descripci�n:</b> realiza las acciones espec�ficas de la ventana que
   * se est� escuchando.
   * @param e Evento producido por la ventana escuchada.
   *
   */
  protected abstract void specificActions(ActionEvent e);

  /**
   * <p> <b>Descripci�n:</b> cierra la ventana cuyos eventos se est�n atendiendo.
   *
   */
  protected void close() {
    frame.close();
  }
}
